<html>
    <head>
        <title>[ExposeKeyedService] 特性</title>
    </head>
    <body>
        <script>
             /*
                            九、[ExposeKeyedService] 特性

                                    ExposeKeyedService特性，用于控制相关类提供哪些"键控服务"：

                                        [ExposeKeyedService<ITaxCalculator>("taxCalculator")]
                                        [ExposeKeyedService<ICalculator>("calculator")]
                                        public class TaxCalculator: ICalculator, ITaxCalculator, ICanCalculate, ITransientDependency
                                        {

                                        }

                                    在上面的示例中，TaxCalculator类公开了ITaxCalculator接口和键taxCalculator
                                                   和ICalculator接口和键calculator。
                                    这意味着你可以从IServiceProvider获得键控服务：

                                        var taxCalculator = ServciceProvider.GetRequeiredKeyedService<ITaxCalculator>("taxCalculator");
                                        var calculator =ServiceProvider.GetRrequiredkeyedService<ICalculator>("calculator")；
                                    
                                    此外，你可以使用 [FromKeyedService]特性来解析构造函数中的某个"键控服务"：

                                            public class MyClass
                                            {
                                                // 注入键控服务
                                                public MyClass([FromKeyedServices("taxCalculator")] ITaxCalculator taxCalculator)
                                                {
                                                    TaxCalculator = taxCalculator;
                                                }
                                            }

                                    请注意， [ExposeKeyedService] 特性只是公开了键控服务。
                                    因此，如果不使用 [FromKeyedServices]特性，你就不能在应用程序中注入ITaxCaculator 或 ICalculator接口。
                                    如果你想同时公开键控服务和非键控服务，你可以一起使用 [ExposeService] 和 [ExposeKeyedServiceAttribute] 特性。
                                            
                                            [ExposeKeyedService<ITaxCalculator>("taxCalculator")]
                                            [ExposeKeyedService<ICalculator>("calculator")]
                                            [ExposeServices(typeof(ITaxCalculator), typeof(ICalculator))]
                                            public class TaxCalculator: ICalculator, ITaxCalculator, ICanCalculate, ITransientDependency
                                            {
                                                
                                            }
                        */
        </script>
    </body>
</html>